package koby99.swing.outline;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;

public class J22_JTable extends JFrame{

	public J22_JTable() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(250,250,450,350);
		setLayout(new BorderLayout());
		setTitle("JTable 맛배기");
		
		//스크롤영역 생성 (반드시 필요)
		JScrollPane scroll = new JScrollPane();
		scroll.setPreferredSize(new Dimension(400, 300));
		getContentPane().add(scroll);
		
		//JTable에 표시할 데이터들과 제목을 정의하기 위해
		// DefaultTableModel 클래스 생성
//		DefaultTableModel model = new DefaultTableModel();
		//수정불가 TableModel 작성 (내부클래스)
		DefaultTableModel model = new DefaultTableModel(){
			@Override
			public boolean isCellEditable(int row, int column) {
//				return super.isCellEditable(row, column); 수정가능 한녀석을 지정하는 거임
				return false; // 수정불가
			}
		};
		
		// 제목 작성
		String title[] = {"제목1", "제목2", "제목3", "제목4", "제목5", "버튼"};
		model.setColumnIdentifiers( title );
		JButton test = new JButton();
		// 본문 작성
//		model.addRow( new String[] { "11", "22", "33", "44", "55" });
		for(int i = 1; i <= 50; ++i){
			Object[][] row = {{i+1, i+1, i+1, i , i}};
		model.addRow( row);
		
		}
		                                           
		//JTable 생성하고 tablemodel 에 추가
		JTable table = new JTable();
		table.setModel( model );
		
		// 테이블의 셀 내용을 가운데로 정렬
		// 테이블 셀의 세부속성을 상세히 제어하려면
		// DefaultTableCellRenderer 클래스를 사용
		// 정렬, 크기조절, 그림삽입 다양한 컴퍼넌트 삽입등의
		// 고급효과는 DefaultTableCellRenderer 없이는 처리 불가
		DefaultTableCellRenderer cell = new DefaultTableCellRenderer();
		cell.setHorizontalAlignment(JLabel.CENTER); // 가운데 정렬
		for(int i = 0; i <= 4 ; ++i){
		table.getColumnModel().getColumn( i ).setCellRenderer(cell);
		}
		
		//JTable에 마우스 더블클릭 이벤트 추가
		table.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				if(e.getClickCount() == 2){
					JTable table = (JTable) e.getSource();
					int row = table.getSelectedRow();		//선택행
					int col = table.getSelectedColumn();		//선택열
					String val = (String)table.getValueAt(row, col); //가져온다
					String msg = row + "/" + col + "/" + val;
					JOptionPane.showMessageDialog(null, msg);
				}
			}
		});
		
		
		//스크롤페인의 뷰영역에 JTable 추가
		scroll.setViewportView(table);
		
		// 화면에 표시
		setVisible(true);
	}
	
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			@Override
			public void run() {
				new J22_JTable();
			}
		});
		
		
		
		
	}
}
